package com.yao.mall.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yao.mall.common.ErrorCode;
import com.yao.mall.config.BusinessException;
import com.yao.mall.mapper.SkuAttrValueMapper;
import com.yao.mall.model.entity.GoodsSku;
import com.yao.mall.model.entity.SkuAttrValue;
import com.yao.mall.model.entity.SkuImage;
import com.yao.mall.model.vo.GoodsSkuVO;
import com.yao.mall.model.vo.SkuAttrValueVO;
import com.yao.mall.model.vo.SkuImageVO;
import com.yao.mall.service.GoodsSkuService;
import com.yao.mall.mapper.GoodsSkuMapper;
import com.yao.mall.service.SkuAttrValueService;
import com.yao.mall.service.SkuImageService;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import static com.yao.mall.constant.CommonConstant.ZERO;

/**
* @author jiahua.yao
* @description 针对表【goods_sku】的数据库操作Service实现
* @date 2024-03-10 20:41:12
*/
@Service
public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku>
    implements GoodsSkuService{

    @Resource
    private GoodsSkuMapper goodsSkuMapper;

    @Resource
    private SkuImageService skuImageService;

    @Resource
    private SkuAttrValueMapper skuAttrValueMapper;

    @Resource
    private SkuAttrValueService skuAttrValueService;


    @Override
    public List<GoodsSkuVO> getGoodsSku(Long spuId, List<Long> keyIds,List<SkuImageVO> isDefaultPics) {
        QueryWrapper<GoodsSku> goodsSkuQueryWrapper = new QueryWrapper<>();
        //todo 适配根据主键id直接获取sku信息，用于查看购物车信息对函数的复用
        goodsSkuQueryWrapper.eq("spu_id", spuId);
        List<GoodsSku> goodsSkuList = goodsSkuMapper.selectList(goodsSkuQueryWrapper);
        List<GoodsSkuVO> goodsSkuVOS = new ArrayList<>();
        for (GoodsSku goodsSku : goodsSkuList) {
            Long skuId = goodsSku.getId();
            QueryWrapper<SkuImage> skuImageQueryWrapper = new QueryWrapper<>();
            skuImageQueryWrapper.eq("sku_id", skuId);
            List<SkuImage> skuImageList = skuImageService.list(skuImageQueryWrapper);
            GoodsSkuVO goodsSkuVO = new GoodsSkuVO();
            BeanUtils.copyProperties(goodsSku, goodsSkuVO);
            List<SkuImageVO> skuImageVOList = skuImageService.toSkuImageVOList(skuImageList);
            goodsSkuVO.setSkuImageVOList(skuImageVOList);
            if (goodsSku.getSkuSort() == 0) {
                isDefaultPics.addAll(skuImageVOList);
            }
            QueryWrapper<SkuAttrValue> skuAttrValueQueryWrapper = new QueryWrapper<>();
            skuAttrValueQueryWrapper.eq("sku_id", skuId);
            List<SkuAttrValue> skuAttrValueList = skuAttrValueMapper.selectList(skuAttrValueQueryWrapper);
            //遍历一次，拿到sku对应属性的keyId，便于之后排序
            if (keyIds.isEmpty()) {
                for (SkuAttrValue skuAttrValue : skuAttrValueList) {
                    keyIds.add(skuAttrValue.getKeyId());
                }
            }
            if (CollectionUtils.isEmpty(skuAttrValueList)) {
                throw new BusinessException(ErrorCode.SYSTEM_ERROR);
            }
            List<SkuAttrValueVO> skuAttrValueVOList = skuAttrValueService.toSkuAttrValueVO(skuAttrValueList)
                    .stream().sorted(Comparator.comparing(SkuAttrValueVO::getKeyId)).collect(Collectors.toList());
            goodsSkuVO.setSkuValueList(skuAttrValueVOList);
            goodsSkuVOS.add(goodsSkuVO);
        }
        return goodsSkuVOS;
    }
}




